home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / amiga / gui / mui / mui14-dv.lha / MUI / Developer / Oberon / MuiBasics.mod < prev    next >
Encoding:
Text File  |  1993-10-05  |  44.9 KB  |  1,472 lines

  1. (*------------------------------------------
  2.   :Module.      MuiBasics.mod
  3.   :Author.      Albert Weinert  [awn]
  4.   :Address.     KrΣhenweg 21 , 50829 K÷ln, Germany
  5.   :EMail.       Usenet_> a.weinert@darkness.gun.de
  6.   :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  7.   :Phone.       0221 / 580 29 84
  8.   :Revision.    R.9
  9.   :Date.        03-Oct-1993
  10.   :Copyright.   FreeWare.
  11.   :Language.    Oberon-2
  12.   :Translator.  AmigaOberon V3.00
  13.   :Contents.    Die Makros die in "mui.h" definiert waren als Prozeduren
  14.   :Imports.     <Importiertes, Name/ShortCut des Autors>
  15.   :Remarks.     Bei VCenter, HCenter, Popup ist es etwas anders.
  16.   :Bugs.        <Bekannte Fehler>
  17.   :Usage.       <Angaben zur Anwendung>
  18.   :History.     .1     [awn] 22-Aug-1993 : Die Prozeduren die in Mui.mod waren nun
  19.   :History.            entfernt und ein seperates Modul daraus gemacht, so das
  20.   :History.            man nicht darauf angewiesen dies in seinem Interfaces zu haben.
  21.   :History.     .2     [awn] 24-Aug-1993 : KrΣftig aufgerΣumt um den erzeugten
  22.   :History.            Maschinencode so kurz wie m÷glich zu halten.
  23.   :History.     .3     [awn] 24-Aug-1993 : PopupEnd() so erweitert das nun ein
  24.   :History.            Objekt mit angeben werden kann, dies ist dafⁿr gedacht wenn
  25.   :History.            man das Popup zu einem anderen Objekt anordnet (z.B String )
  26.   :History.     .4     [awn] 24-Aug-1993 : Im Zuge der Popup ─nderung wurde eine
  27.   :History.            eigene Speziell auf Mui abgestimmte Hook Parameter ⁿbergabe
  28.   :History.            erstellt (Allerdings OS Konform eingebettet). Der Parameter
  29.   :History.            Deklaration der Hook-Prozedur muss nun so aussehen wie der
  30.   :History.            Typ `HookDef'.
  31.   :History.     .5     [awn] 25-Aug-1993 : Tipfehler bei TagItem2() und TagItem3()
  32.   :History.            entfernt.
  33.   :History.     .6     [awn] 25-Aug-1993 : Die Groups und Frames wieder mit der
  34.   :History.            M÷glichkeit versehen dort TagListen zu ⁿbergeben.
  35.   :History.     .7     [awn] 30-Aug-1993 : PageGroup() hizugefⁿgt.
  36.   :History.     .8     [awn] 14-Sep-1993 : Fehler bei Strings() dort wurde in der
  37.   :History.            Deklaration 2 mal A1 benutzt.
  38.   :History.     .9     [awn] 03-Oct-1993 : Eine einfache PlausibiltΣtsprⁿfung eingebaut.
  39.   :History.            Fⁿr jede #?Object() Prozedur gibt es nun ein End#?() Prozedure,
  40.   :History.            wenn der Objekt Typ nicht ⁿbereinstimmt wird ein NIL zurⁿckgeben.
  41.   :History.            Dies ist dafⁿr um wΣhrend der Programmentwicklung Abstⁿrze zu
  42.   :History.            umgehen, wenn das Programm einmal steht sind diese nicht mehr
  43.   :History.            notwendig, aber brauchen nicht entfernt zu werden.
  44.  
  45. --------------------------------------------*)
  46.  
  47. MODULE MuiBasics;
  48.  
  49. IMPORT Exec, Utility, Intuition, SYSTEM, Mui;
  50.  
  51. CONST   ArrayAdd = 16;
  52.  
  53. TYPE
  54.   TagArray * = UNTRACED POINTER TO ARRAY OF Utility.TagItem;
  55.   Class    * = UNTRACED POINTER TO ClassDesc;
  56.   Args     * = UNTRACED POINTER TO ArgsDesc;
  57.   Hook     * = UNTRACED POINTER TO HookDesc;
  58.  
  59.   ClassDesc = STRUCT( n : Exec.Node );
  60.                 name   : ARRAY 32 OF CHAR;
  61.                 tags   : TagArray;
  62.                 tagnum : LONGINT;
  63.                 tagdata : BOOLEAN;
  64.               END;
  65.  
  66.   ArgsDesc * = STRUCT END;
  67.  
  68.   PopupArgs * = STRUCT ( d : ArgsDesc );
  69.                   linkedObj : Mui.Object (* Das Objekt zu dem das Popup Object gelinkt ist *)
  70.                 END;
  71.   HookDef * = PROCEDURE ( hook : Hook; object : Mui.Object; args : Args ):LONGINT;
  72.  
  73.  
  74. (* Hook-Example.
  75.  *
  76.  *  TYPE  PopWindowArgs = STRUCT( d : MuiBasics.ArgsDesc );
  77.  *                          window : Mui.Object;
  78.  *                        END;
  79.  *
  80.  *  VAR myHook : MuiBasics.Hook;
  81.  *      button : Mui.Object;
  82.  *      window : Mui.Object;
  83.  *
  84.  *  PROCEDURE PopWindow( hook : Hook; object : Mui.Object; args : Args ) : LONGINT;
  85.  *    BEGIN
  86.  *      IF args # NIL THEN
  87.  *        IF args(PopWindowArgs).window # NIL THEN
  88.  *          Mui.DoMethod( args(PopWindowArgs).window, Mui.mWindowToFront );
  89.  *        END;
  90.  *      END;
  91.  *      RETURN 0;
  92.  *    END PopWindow;
  93.  *
  94.  *  BEGIN
  95.  *    [... create Application Windows ...]
  96.  *
  97.  *    myHook := MuiBasics.MakeHook( PopWindow );
  98.  *    IF myHook # NIL THEN
  99.  *      Mui.DoMethod( button, Mui.mNotify, Mui.aPressed, Exec.false,
  100.  *                    button, 3, Mui.mCallHook, myHook, window );
  101.  *    END;
  102.  *    [... Do the other magic ...]
  103.  *
  104.  * Note: Typed on the fly, no warranty is given that this piece of code reallay work.
  105.  *)
  106.  
  107.   HookDesc * = STRUCT( minNode : Exec.MinNode );
  108.              entry     : PROCEDURE ( hook{8}   : Hook;
  109.                                      object{10}: Mui.Object;
  110.                                      args{9}: Args ):LONGINT;
  111.              subEntry  : HookDef;
  112.              a5 : Exec.APTR;
  113.  
  114.              object : Mui.Object;
  115.            END;
  116.  
  117. VAR no : Exec.List;
  118.  
  119.   (* ---- MuiBasics Hook-Dispatcher ---- *)
  120.   PROCEDURE HookEntry*(hook{8}: Hook;               (* $SaveRegs+ $StackChk- *)
  121.                        object{10}: Mui.Object;
  122.                        args{9}: Args): LONGINT;
  123.   (*
  124.    * Calls hook.subEntry. The contents of A5 have to be stored in hook.a5,
  125.    * else A5 would not be set correctly.
  126.    *)
  127.   
  128.   BEGIN
  129.     SYSTEM.SETREG(13,hook.a5);
  130.     RETURN hook.subEntry(hook,object,args);
  131.   END HookEntry;
  132.  
  133.   PROCEDURE MakeHook* ( entry: HookDef ):Hook;
  134.   (*------------------------------------------
  135.     :Input.     entry : Prozedure die gestartet werden soll, wenn der Hook
  136.     :Input.             aufgerufen wird.
  137.     :Output.    Hook der direkt einsatzfΣhig ist (oder NIL, falls es nicht
  138.     :Output.    geklappt haben sollte).
  139.     :Semantic.  Erstellt einen Hook und bindet die Prozedure ein.
  140.     :Note.
  141.     :Update.    24-Aug-1993 [awn] - erstellt.
  142.   --------------------------------------------*)
  143.     VAR hook : Hook;
  144.   BEGIN
  145.     NEW( hook );
  146.     IF hook # NIL THEN
  147.       hook.entry := HookEntry;
  148.       hook.subEntry := entry;
  149.       hook.a5 := SYSTEM.REG(13);
  150.     END;
  151.     RETURN hook;
  152.   END MakeHook;
  153.  
  154.   PROCEDURE SetHookObject*( hook : Hook; object : Mui.Object );
  155.   (*------------------------------------------
  156.     :Input.     hook : Initialisierte Hook;
  157.     :Input.     object : Das Object zu wem der Hook gelinkt ist.
  158.     :Output.
  159.     :Semantic.  TrΣgt in die Hook-Struktur ein Object ein, so
  160.     :Semantic.  das man spΣter noch darauf zugreifen kann.
  161.     :Note.
  162.     :Update.    24-Aug-1993 [awn] - erstellt.
  163.   --------------------------------------------*)
  164.     BEGIN
  165.       IF hook # NIL THEN
  166.         hook.object := object;
  167.       END;
  168.     END SetHookObject;
  169.  
  170.   PROCEDURE GetHookObject*( hook : Hook ):Mui.Object;
  171.   (*------------------------------------------
  172.     :Input.     hook : Ein Hook
  173.     :Output.    Das Objekt welches in der Hook Struktur eingetragen ist
  174.     :Semantic.
  175.     :Note.
  176.     :Update.    24-Aug-1993 [awn] - erstellt.
  177.   --------------------------------------------*)
  178.     BEGIN
  179.       IF hook # NIL THEN
  180.         RETURN hook.object;
  181.       END;
  182.     END GetHookObject;
  183.  
  184.   PROCEDURE Init();
  185.     BEGIN
  186.       no.head := SYSTEM.ADR( no.tail );
  187.       no.tail := NIL;
  188.       no.tailPred := SYSTEM.ADR( no.head );
  189.     END Init;
  190.  
  191.   PROCEDURE NewClass*();
  192.   (* $SaveRegs+ *)
  193.     VAR cl : Class;
  194.     BEGIN
  195.       NEW( cl );
  196.  
  197.       (* $IF GarbageCollector *)
  198.  
  199.       Exec.AddTail( no, cl );
  200.  
  201.       (* $ELSE *)
  202.  
  203.       IF cl # NIL THEN
  204.         Exec.AddTail( no, SYSTEM.VAL( Exec.CommonNodePtr, cl ) );
  205.         cl.tagdata := FALSE;
  206.       END;
  207.  
  208.       (* $END *)
  209.     END NewClass;
  210.  
  211.   PROCEDURE CheckAndExpandTags( cl : Class;  n : LONGINT);
  212.   (* $SaveRegs+ *)
  213.     VAR newtags : TagArray;
  214.         ShouldLen, MaxLen, i : LONGINT;
  215.  
  216.     BEGIN
  217.       IF n = 0 THEN RETURN END;
  218.       IF cl.tags # NIL THEN
  219.         ShouldLen := cl.tagnum + n;
  220.         MaxLen := LEN( cl.tags^ )-1;
  221.         IF ShouldLen >= MaxLen THEN
  222.           INC( ShouldLen, ArrayAdd );
  223.           SYSTEM.ALLOCATE( newtags, ShouldLen );
  224.           FOR i := 0 TO cl.tagnum-1 DO
  225.             newtags[i] := cl.tags[i];
  226.           END;
  227.  
  228.           (* $IF GarbageCollector *)
  229.  
  230.             cl.tags := newtags;
  231.  
  232.           (* $ELSE *)
  233.  
  234.             DISPOSE( cl.tags );
  235.             cl.tags := newtags;
  236.  
  237.           (* $END *)
  238.         END;
  239.       ELSE
  240.         ShouldLen := ArrayAdd + n ;
  241.         NEW( cl.tags, ShouldLen );
  242.         cl.tagnum := 0;
  243.       END;
  244.     END CheckAndExpandTags;
  245.  
  246.   PROCEDURE clTag ( cl : Class;  tag : Exec.APTR );
  247.   (* $SaveRegs+ *)
  248.     BEGIN
  249.       CheckAndExpandTags( cl, 1 );
  250.       IF cl.tags # NIL THEN
  251.         IF cl.tagdata THEN
  252.           cl.tags[cl.tagnum].data := tag;
  253.           cl.tagdata := FALSE;
  254.           INC( cl.tagnum );
  255.         ELSE
  256.           cl.tags[cl.tagnum].tag := tag;
  257.           cl.tagdata := TRUE;
  258.         END;
  259.       END;
  260.     END clTag;
  261.  
  262.   PROCEDURE clTagItem ( cl : Class;  tag, data : Exec.APTR );
  263.   (* $SaveRegs+ *)
  264.     BEGIN
  265.       CheckAndExpandTags( cl, 1 );
  266.       IF cl.tags # NIL THEN
  267.         cl.tags[cl.tagnum].data := data;
  268.         cl.tags[cl.tagnum].tag := tag;
  269.         INC( cl.tagnum );
  270.       END;
  271.     END clTagItem;
  272.  
  273.   PROCEDURE countTag( tags{9} : Utility.TagListPtr) : LONGINT;
  274.   (* $SaveRegs+ *)
  275.     VAR i : LONGINT;
  276.     BEGIN
  277.       IF tags = NIL THEN RETURN( 0 ) END;
  278.       i:=0;
  279.       WHILE tags[i].tag # Utility.end DO INC(i); END;
  280.       RETURN i;
  281.     END countTag;
  282.  
  283.   PROCEDURE clTagsA*( cl{8} : Class;  tags{9} : Utility.TagListPtr );
  284.   (* $SaveRegs+ *)
  285.     VAR  i : LONGINT;
  286.  
  287.     BEGIN
  288.       IF tags = NIL THEN RETURN END;
  289.       CheckAndExpandTags( cl, countTag( tags ) );
  290.       i:=0;
  291.       IF cl.tags # NIL THEN
  292.         WHILE tags[i].tag # Utility.end DO
  293.           cl.tags[cl.tagnum] := tags[i];
  294.           INC(cl.tagnum); INC(i);
  295.         END;
  296.       END;
  297.     END clTagsA;
  298.  
  299.   PROCEDURE clTags{"MuiBasics.clTagsA"} ( cl{8} : Class;  tags{9}.. : Utility.Tag );
  300.  
  301.   PROCEDURE TagsA*( tags{9} : Utility.TagListPtr );
  302.   (* $SaveRegs+ *)
  303.     BEGIN
  304.       IF no.tailPred # SYSTEM.ADR( no.head ) THEN;
  305.         clTagsA( SYSTEM.VAL( Class, no.tailPred ), tags );
  306.       END;
  307.     END TagsA;
  308.  
  309.   PROCEDURE Tags*{"MuiBasics.TagsA"} ( tags{9}.. : Utility.Tag );
  310.  
  311.   PROCEDURE Tag*( tag : Exec.APTR );
  312.   (* $SaveRegs+ *)
  313.     BEGIN
  314.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  315.         clTag( SYSTEM.VAL( Class, no.tailPred ), tag );
  316.       END;
  317.     END Tag;
  318.  
  319.   PROCEDURE TagItem*( tag, data : Exec.APTR );
  320.   (* $SaveRegs+ *)
  321.     BEGIN
  322.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  323.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag, data );
  324.       END;
  325.     END TagItem;
  326.  
  327.   PROCEDURE TagItem2*( tag1, data1, tag2, data2 : Exec.APTR );
  328.   (* $SaveRegs+ *)
  329.     BEGIN
  330.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  331.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag1, data1 );
  332.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag2, data2 );
  333.       END;
  334.     END TagItem2;
  335.  
  336.   PROCEDURE TagItem3*( tag1, data1, tag2, data2, tag3, data3 : Exec.APTR );
  337.   (* $SaveRegs+ *)
  338.     BEGIN
  339.       IF no.tailPred # SYSTEM.ADR( no.head )  THEN
  340.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag1, data1 );
  341.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag2, data2 );
  342.         clTagItem( SYSTEM.VAL( Class, no.tailPred ), tag3, data3 );
  343.       END;
  344.     END TagItem3;
  345.  
  346.   PROCEDURE End*():Mui.Object;
  347.     VAR cl : Exec.NodePtr;
  348.         ret : Exec.APTR;
  349.  
  350.     BEGIN
  351.       ret := NIL;
  352.       cl := no.tailPred;
  353.       WITH cl : Class DO
  354.  
  355.         IF cl.tags # NIL THEN
  356.           cl.tags[cl.tagnum].tag:=Utility.end;
  357.           ret := Mui.NewObject( cl.name, Utility.more, SYSTEM.ADR(cl.tags^) );
  358.         ELSE
  359.           ret := Mui.NewObject( cl.name );
  360.         END;
  361.  
  362.         Exec.Remove( cl );
  363.  
  364.         (* $IFNOT GarbageCollector *)
  365.  
  366.           DISPOSE( cl.tags );
  367.           DISPOSE( cl );
  368.  
  369.         (* $END *)
  370.  
  371.  
  372.         IF no.tailPred # SYSTEM.ADR( no.head ) THEN
  373.           clTag( SYSTEM.VAL( Class, no.tailPred ), ret );
  374.         END;
  375.  
  376.       END;
  377.       RETURN ret;
  378.     END End;
  379.  
  380.   PROCEDURE end*();
  381.     BEGIN
  382.       SYSTEM.SETREG( 0, End() );
  383.     END end;
  384.  
  385.   PROCEDURE EndApplication*():Mui.Object;
  386.     BEGIN
  387.       IF Mui.cApplication # no.tailPred(Class).name THEN RETURN NIL END;
  388.       RETURN End();
  389.     END EndApplication;
  390.  
  391.   PROCEDURE EndNotify*():Mui.Object;
  392.     BEGIN
  393.       IF Mui.cNotify # no.tailPred(Class).name THEN RETURN NIL END;
  394.       RETURN End();
  395.     END EndNotify;
  396.  
  397.   PROCEDURE EndWindow*():Mui.Object;
  398.     BEGIN
  399.       IF Mui.cWindow # no.tailPred(Class).name THEN RETURN NIL END;
  400.       RETURN End();
  401.     END EndWindow;
  402.  
  403.   PROCEDURE EndRectangle*():Mui.Object;
  404.     BEGIN
  405.       IF Mui.cRectangle # no.tailPred(Class).name THEN RETURN NIL END;
  406.       RETURN End();
  407.     END EndRectangle;
  408.  
  409.   PROCEDURE EndImage*():Mui.Object;
  410.     BEGIN
  411.       IF Mui.cImage # no.tailPred(Class).name THEN RETURN NIL END;
  412.       RETURN End();
  413.     END EndImage;
  414.  
  415.   PROCEDURE EndText*():Mui.Object;
  416.     BEGIN
  417.       IF Mui.cText # no.tailPred(Class).name THEN RETURN NIL END;
  418.       RETURN End();
  419.     END EndText;
  420.  
  421.   PROCEDURE EndString*():Mui.Object;
  422.     BEGIN
  423.       IF Mui.cString # no.tailPred(Class).name THEN RETURN NIL END;
  424.       RETURN End();
  425.     END EndString;
  426.  
  427.   PROCEDURE EndProp*():Mui.Object;
  428.     BEGIN
  429.       IF Mui.cProp # no.tailPred(Class).name THEN RETURN NIL END;
  430.       RETURN End();
  431.     END EndProp;
  432.  
  433.   PROCEDURE EndSlider*():Mui.Object;
  434.     BEGIN
  435.       IF Mui.cSlider # no.tailPred(Class).name THEN RETURN NIL END;
  436.       RETURN End();
  437.     END EndSlider;
  438.  
  439.   PROCEDURE EndList*():Mui.Object;
  440.     BEGIN
  441.       IF Mui.cList # no.tailPred(Class).name THEN RETURN NIL END;
  442.       RETURN End();
  443.     END EndList;
  444.  
  445.   PROCEDURE EndFloattext*():Mui.Object;
  446.     BEGIN
  447.       IF Mui.cFloattext # no.tailPred(Class).name THEN RETURN NIL END;
  448.       RETURN End();
  449.     END EndFloattext;
  450.  
  451.   PROCEDURE EndVolumelist*():Mui.Object;
  452.     BEGIN
  453.       IF Mui.cVolumelist # no.tailPred(Class).name THEN RETURN NIL END;
  454.       RETURN End();
  455.     END EndVolumelist;
  456.  
  457.   PROCEDURE EndDirlist*():Mui.Object;
  458.     BEGIN
  459.       IF Mui.cDirlist # no.tailPred(Class).name THEN RETURN NIL END;
  460.       RETURN End();
  461.     END EndDirlist;
  462.  
  463.   PROCEDURE EndGroup*():Mui.Object;
  464.     BEGIN
  465.       IF Mui.cGroup # no.tailPred(Class).name THEN RETURN NIL END;
  466.       RETURN End();
  467.     END EndGroup;
  468.  
  469.   PROCEDURE EndScrollbar*():Mui.Object;
  470.     BEGIN
  471.       IF Mui.cScrollbar # no.tailPred(Class).name THEN RETURN NIL END;
  472.       RETURN End();
  473.     END EndScrollbar;
  474.  
  475.   PROCEDURE EndListview*():Mui.Object;
  476.     BEGIN
  477.       IF Mui.cListview # no.tailPred(Class).name THEN RETURN NIL END;
  478.       RETURN End();
  479.     END EndListview;
  480.  
  481.   PROCEDURE EndRadio*():Mui.Object;
  482.     BEGIN
  483.       IF Mui.cRadio # no.tailPred(Class).name THEN RETURN NIL END;
  484.       RETURN End();
  485.     END EndRadio;
  486.  
  487.   PROCEDURE EndCycle*():Mui.Object;
  488.     BEGIN
  489.       IF Mui.cCycle # no.tailPred(Class).name THEN RETURN NIL END;
  490.       RETURN End();
  491.     END EndCycle;
  492.  
  493.   PROCEDURE EndGauge*():Mui.Object;
  494.     BEGIN
  495.       IF Mui.cGauge # no.tailPred(Class).name THEN RETURN NIL END;
  496.       RETURN End();
  497.     END EndGauge;
  498.  
  499.   PROCEDURE EndScale*():Mui.Object;
  500.     BEGIN
  501.       IF Mui.cScale # no.tailPred(Class).name THEN RETURN NIL END;
  502.       RETURN End();
  503.     END EndScale;
  504.  
  505.   PROCEDURE EndBoopsi*():Mui.Object;
  506.     BEGIN
  507.       IF Mui.cBoopsi # no.tailPred(Class).name THEN RETURN NIL END;
  508.       RETURN End();
  509.     END EndBoopsi;
  510.  
  511.   PROCEDURE NewObjectA*( name{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr );
  512.   (* $SaveRegs+ *)
  513.     BEGIN
  514.       NewClass();
  515.       COPY( name^, no.tailPred(Class).name );
  516.       TagsA( tags );
  517.     END NewObjectA;
  518.  
  519.   PROCEDURE NewObject{"MuiBasics.NewObjectA"} ( name {8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  520.  
  521. (***************************************************************************
  522. ** Class Tree
  523. ****************************************************************************
  524. **
  525. ** rootclass
  526. **    Notify
  527. **       Application
  528. **       Window
  529. **       Area
  530. **          Rectangle
  531. **          Image
  532. **          Text
  533. **          String
  534. **          Prop
  535. **          Slider
  536. **          List
  537. **             Floattext
  538. **             Volumelist
  539. **             Dirlist
  540. **          Group
  541. **             Scrollbar
  542. **             Listview
  543. **             Radio
  544. **             Cycle
  545. **          Gauge
  546. **          Scale
  547. **          Boopsi
  548. **************************************************************)
  549.  
  550. (**************************************************************************
  551. **
  552. ** Object Generation
  553. ** -----------------
  554. **
  555. ** The xxxObject (and xChilds) procedures generate new instances of MUI classes.
  556. ** Every xxxObject can be followed by tagitems specifying initial create
  557. ** time attributes for the new object and must be terminated with the
  558. ** End macro:
  559. **
  560. ** StringObject;
  561. **          TagItem2( Mui.aStringContents, "foo",
  562. **                    Mui.aStringMaxLen  , 40 );
  563. ** obj := End();
  564. **
  565. ** With the Child, SubWindow and WindowContents shortcuts you can
  566. ** construct a complete GUI within one command:
  567. **
  568. ** ApplicationObject;
  569. **
  570. **          ...
  571. **
  572. **          SubWindow; WindowObject;
  573. **             WindowContents; VGroup;
  574. **                Child; String("foo",40);
  575. **                Child; String("bar",50);
  576. **                Child; HGroup;
  577. **                   Child; CheckMark(TRUE);
  578. **                   Child; CheckMark(FALSE);
  579. **                   end;
  580. **                end;
  581. **             end;
  582. **
  583. **          SubWindow; WindowObject;
  584. **             WindowContents; HGroup;
  585. **                Child; ...;
  586. **                Child; ...;
  587. **                end;
  588. **             end;
  589. **
  590. **          ...
  591. **
  592. ** app := End();
  593. **
  594. ***************************************************************************)
  595.  
  596.   PROCEDURE WindowObjectA*( tags{9} : Utility.TagListPtr );
  597.   (* $SaveRegs+ *)
  598.     BEGIN
  599.       NewObjectA( SYSTEM.ADR( Mui.cWindow ), tags );
  600.     END WindowObjectA;
  601.  
  602.   PROCEDURE WindowObject*{"MuiBasics.WindowObjectA"} ( tags{9}.. : Utility.Tag);
  603.  
  604.   PROCEDURE ImageObjectA*( tags{9} : Utility.TagListPtr );
  605.   (* $SaveRegs+ *)
  606.     BEGIN
  607.       NewObjectA( SYSTEM.ADR( Mui.cImage ), tags );
  608.     END ImageObjectA;
  609.  
  610.   PROCEDURE ImageObject*{"MuiBasics.ImageObjectA"} ( tags{9}.. : Utility.Tag);
  611.  
  612.   PROCEDURE NotifyObjectA*( tags{9} : Utility.TagListPtr );
  613.   (* $SaveRegs+ *)
  614.     BEGIN
  615.       NewObjectA( SYSTEM.ADR( Mui.cNotify ), tags );
  616.     END NotifyObjectA;
  617.  
  618.   PROCEDURE NotifyObject*{"MuiBasics.NotifyObjectA"} ( tags{9}.. : Utility.Tag);
  619.  
  620.   PROCEDURE ApplicationObjectA*( tags{9} : Utility.TagListPtr );
  621.   (* $SaveRegs+ *)
  622.     BEGIN
  623.       NewObjectA( SYSTEM.ADR( Mui.cApplication ), tags );
  624.     END ApplicationObjectA;
  625.  
  626.   PROCEDURE ApplicationObject*{"MuiBasics.ApplicationObjectA"} ( tags{9}.. : Utility.Tag);
  627.  
  628.   PROCEDURE TextObjectA*( tags{9} : Utility.TagListPtr );
  629.   (* $SaveRegs+ *)
  630.     BEGIN
  631.       NewObjectA( SYSTEM.ADR( Mui.cText ), tags );
  632.     END TextObjectA;
  633.  
  634.   PROCEDURE TextObject*{"MuiBasics.TextObjectA"} ( tags{9}.. : Utility.Tag);
  635.  
  636.   PROCEDURE RectangleObjectA*( tags{9} : Utility.TagListPtr );
  637.   (* $SaveRegs+ *)
  638.     BEGIN
  639.       NewObjectA( SYSTEM.ADR( Mui.cRectangle ), tags );
  640.     END RectangleObjectA;
  641.  
  642.   PROCEDURE RectangleObject*{"MuiBasics.RectangleObjectA"} ( tags{9}.. : Utility.Tag);
  643.  
  644.   PROCEDURE ListObjectA*( tags{9} : Utility.TagListPtr );
  645.   (* $SaveRegs+ *)
  646.     BEGIN
  647.       NewObjectA( SYSTEM.ADR( Mui.cList ), tags );
  648.     END ListObjectA;
  649.  
  650.   PROCEDURE ListObject*{"MuiBasics.ListObjectA"} ( tags{9}.. : Utility.Tag);
  651.  
  652.   PROCEDURE PropObjectA*( tags{9} : Utility.TagListPtr );
  653.   (* $SaveRegs+ *)
  654.     BEGIN
  655.       NewObjectA( SYSTEM.ADR( Mui.cProp ), tags );
  656.     END PropObjectA;
  657.  
  658.   PROCEDURE PropObject*{"MuiBasics.PropObjectA"} ( tags{9}.. : Utility.Tag);
  659.  
  660.   PROCEDURE StringObjectA*( tags{9} : Utility.TagListPtr );
  661.   (* $SaveRegs+ *)
  662.     BEGIN
  663.       NewObjectA( SYSTEM.ADR( Mui.cString ), tags );
  664.     END StringObjectA;
  665.  
  666.   PROCEDURE StringObject*{"MuiBasics.StringObjectA"} ( tags{9}.. : Utility.Tag);
  667.  
  668.   PROCEDURE ScrollbarObjectA*( tags{9} : Utility.TagListPtr );
  669.   (* $SaveRegs+ *)
  670.     BEGIN
  671.       NewObjectA( SYSTEM.ADR( Mui.cScrollbar ), tags );
  672.     END ScrollbarObjectA;
  673.  
  674.   PROCEDURE ScrollbarObject*{"MuiBasics.ScrollbarObjectA"} ( tags{9}.. : Utility.Tag);
  675.  
  676.   PROCEDURE ListviewObjectA*( tags{9} : Utility.TagListPtr );
  677.   (* $SaveRegs+ *)
  678.     BEGIN
  679.       NewObjectA( SYSTEM.ADR( Mui.cListview), tags );
  680.     END ListviewObjectA;
  681.  
  682.   PROCEDURE ListviewObject*{"MuiBasics.ListviewObjectA"} ( tags{9}.. : Utility.Tag);
  683.  
  684.   PROCEDURE RadioObjectA*( tags{9} : Utility.TagListPtr );
  685.   (* $SaveRegs+ *)
  686.     BEGIN
  687.       NewObjectA( SYSTEM.ADR( Mui.cRadio ), tags );
  688.     END RadioObjectA;
  689.  
  690.   PROCEDURE RadioObject*{"MuiBasics.RadioObjectA"} ( tags{9}.. : Utility.Tag);
  691.  
  692.   PROCEDURE DirlistObjectA*( tags{9} : Utility.TagListPtr );
  693.   (* $SaveRegs+ *)
  694.     BEGIN
  695.       NewObjectA( SYSTEM.ADR( Mui.cDirlist ), tags );
  696.     END DirlistObjectA;
  697.  
  698.   PROCEDURE DirlistObject*{"MuiBasics.DirlistObjectA"} ( tags{9}.. : Utility.Tag);
  699.  
  700.   PROCEDURE VolumelistObjectA*( tags{9} : Utility.TagListPtr );
  701.   (* $SaveRegs+ *)
  702.     BEGIN
  703.       NewObjectA( SYSTEM.ADR( Mui.cVolumelist), tags );
  704.     END VolumelistObjectA;
  705.  
  706.   PROCEDURE VolumelistObject*{"MuiBasics.VolumelistObjectA"} ( tags{9}.. : Utility.Tag);
  707.  
  708.   PROCEDURE FloattextObjectA*( tags{9} : Utility.TagListPtr );
  709.   (* $SaveRegs+ *)
  710.     BEGIN
  711.       NewObjectA( SYSTEM.ADR( Mui.cFloattext), tags );
  712.     END FloattextObjectA;
  713.  
  714.   PROCEDURE FloattextObject*{"MuiBasics.FloattextObjectA"} ( tags{9}.. : Utility.Tag);
  715.  
  716.   PROCEDURE SliderObjectA*( tags{9} : Utility.TagListPtr );
  717.   (* $SaveRegs+ *)
  718.     BEGIN
  719.       NewObjectA( SYSTEM.ADR( Mui.cSlider ), tags );
  720.     END SliderObjectA;
  721.  
  722.   PROCEDURE SliderObject*{"MuiBasics.SliderObjectA"} ( tags{9}.. : Utility.Tag);
  723.  
  724.   PROCEDURE CycleObjectA*( tags{9} : Utility.TagListPtr );
  725.   (* $SaveRegs+ *)
  726.     BEGIN
  727.       NewObjectA( SYSTEM.ADR( Mui.cCycle ), tags );
  728.     END CycleObjectA;
  729.  
  730.   PROCEDURE CycleObject*{"MuiBasics.CycleObjectA"} ( tags{9}.. : Utility.Tag);
  731.  
  732.   PROCEDURE GaugeObjectA*( tags{9} : Utility.TagListPtr );
  733.   (* $SaveRegs+ *)
  734.     BEGIN
  735.       NewObjectA( SYSTEM.ADR( Mui.cGauge ), tags );
  736.     END GaugeObjectA;
  737.  
  738.   PROCEDURE GaugeObject*{"MuiBasics.GaugeObjectA"} ( tags{9}.. : Utility.Tag);
  739.  
  740.   PROCEDURE ScaleObjectA*( tags{9} : Utility.TagListPtr );
  741.   (* $SaveRegs+ *)
  742.     BEGIN
  743.       NewObjectA( SYSTEM.ADR( Mui.cScale ), tags );
  744.     END ScaleObjectA;
  745.  
  746.   PROCEDURE ScaleObject*{"MuiBasics.ScaleObjectA"} ( tags{9}.. : Utility.Tag);
  747.  
  748.   PROCEDURE BoopsiObjectA*( tags{9} : Utility.TagListPtr );
  749.   (* $SaveRegs+ *)
  750.     BEGIN
  751.       NewObjectA( SYSTEM.ADR( Mui.cBoopsi ), tags );
  752.     END BoopsiObjectA;
  753.  
  754.   PROCEDURE BoopsiObject*{"MuiBasics.BoopsiObjectA"} ( tags{9}.. : Utility.Tag);
  755.  
  756.   PROCEDURE GroupObjectA*( tags{9} : Utility.TagListPtr );
  757.   (* $SaveRegs+ *)
  758.     BEGIN
  759.       NewObjectA( SYSTEM.ADR( Mui.cGroup), tags );
  760.     END GroupObjectA;
  761.  
  762.   PROCEDURE GroupObject*{"MuiBasics.GroupObjectA"} ( tags{9}.. : Utility.Tag);
  763.  
  764.   PROCEDURE VGroupA*( tags{9} : Utility.TagListPtr );
  765.   (* $SaveRegs+ *)
  766.     BEGIN
  767.       NewObjectA( SYSTEM.ADR( Mui.cGroup ), tags );
  768.       TagsA( tags );
  769.     END VGroupA;
  770.  
  771.   PROCEDURE VGroup*{"MuiBasics.VGroupA"}( tags{9}.. : Utility.Tag );
  772.  
  773.   PROCEDURE HGroupA*( tags{9} : Utility.TagListPtr );
  774.   (* $SaveRegs+ *)
  775.     BEGIN
  776.       NewObject( Mui.cGroup, Mui.aGroupHoriz, Exec.true, Utility.end );
  777.       TagsA( tags );
  778.     END HGroupA;
  779.  
  780.   PROCEDURE HGroup*{"MuiBasics.HGroupA"}( tags{9}.. : Utility.Tag );
  781.  
  782.   PROCEDURE ColGroupA*( cols{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  783.   (* $SaveRegs+ *)
  784.     BEGIN
  785.       NewObject( Mui.cGroup, Mui.aGroupColumns, cols, Utility.end );
  786.       TagsA( tags );
  787.     END ColGroupA;
  788.  
  789.   PROCEDURE ColGroup*{"MuiBasics.ColGroupA"} ( cols{3} : LONGINT; tags{9}.. : Utility.Tag );
  790.  
  791.   PROCEDURE RowGroupA*( rows{3} : LONGINT; tags{9} : Utility.TagListPtr  );
  792.   (* $SaveRegs+ *)
  793.     BEGIN
  794.       NewObject( Mui.cGroup, Mui.aGroupRows, rows, Utility.end );
  795.       TagsA( tags );
  796.     END RowGroupA;
  797.  
  798.   PROCEDURE RowGroup*{"MuiBasics.RowGroupA"}( rows{3} : LONGINT; tags{9}.. : Utility.Tag  );
  799.  
  800.   PROCEDURE PageGroupA*( tags{9} : Utility.TagListPtr );
  801.   (* $SaveRegs+ *)
  802.     BEGIN
  803.       NewObject( Mui.cGroup, Mui.aGroupPageMode, Exec.true, Utility.end );
  804.       TagsA( tags );
  805.     END PageGroupA;
  806.  
  807.   PROCEDURE PageGroup*{"MuiBasics.PageGroupA"}( tags{9}.. : Utility.Tag );
  808.  
  809.   PROCEDURE Child*();
  810.   (* $SaveRegs+ *)
  811.     BEGIN
  812.       Tag( Mui.aGroupChild );
  813.     END Child;
  814.  
  815.   PROCEDURE SubWindow*();
  816.   (* $SaveRegs+ *)
  817.     BEGIN
  818.       Tag( Mui.aApplicationWindow );
  819.     END SubWindow;
  820.  
  821.   PROCEDURE WindowContents*();
  822.   (* $SaveRegs+ *)
  823.     BEGIN
  824.       Tag( Mui.aWindowRootObject );
  825.     END WindowContents;
  826.  
  827. (***************************************************************************
  828. **
  829. ** Frame Types
  830. ** -----------
  831. **
  832. ** These procedures may be used to specify one of MUI's different frame types.
  833. ** Note that every procedure consists of one or more { ti_Tag, ti_Data }
  834. ** pairs.
  835. **
  836. ** GroupFrameT() is a special kind of frame that contains a centered
  837. ** title text.
  838. **
  839. ** HGroup; GroupFrameT("Horiz Groups");
  840. **    Child; RectangleObject; TextFrame  ; end;
  841. **    Child; RectangleObject; StringFrame; end;
  842. **    Child; RectangleObject; ButtonFrame; end;
  843. **    Child; RectangleObject; ListFrame  ; end;
  844. **    end;
  845. **
  846. ***************************************************************************)
  847.  
  848.   PROCEDURE NoFrameA*( tags{9} : Utility.TagListPtr );
  849.     BEGIN
  850.       TagItem( Mui.aFrame , Mui.vFrameNone );
  851.       TagsA( tags );
  852.     END NoFrameA;
  853.  
  854.   PROCEDURE NoFrame*{"MuiBasics.NoFrameA"} ( tags{9}.. : Utility.Tag );
  855.  
  856.   PROCEDURE ButtonFrameA*( tags{9} : Utility.TagListPtr  );
  857.     BEGIN
  858.       TagItem( Mui.aFrame , Mui.vFrameButton );
  859.       TagsA( tags );
  860.     END ButtonFrameA;
  861.  
  862.   PROCEDURE ButtonFrame*{"MuiBasics.ButtonFrameA"} ( tags{9}.. : Utility.Tag  );
  863.  
  864.   PROCEDURE ImageButtonFrameA*( tags{9} : Utility.TagListPtr );
  865.     BEGIN
  866.       TagItem( Mui.aFrame , Mui.vFrameImageButton );
  867.       TagsA( tags );
  868.     END ImageButtonFrameA;
  869.  
  870.   PROCEDURE ImageButtonFrame*{"MuiBasics.ImageButtonFrameA"} ( tags{9}.. : Utility.Tag );
  871.  
  872.   PROCEDURE TextFrameA*( tags{9} : Utility.TagListPtr );
  873.     BEGIN
  874.       TagItem( Mui.aFrame , Mui.vFrameText );
  875.       TagsA( tags );
  876.     END TextFrameA;
  877.  
  878.   PROCEDURE TextFrame*{"MuiBasics.TextFrameA"} ( tags{9}.. : Utility.Tag );
  879.  
  880.   PROCEDURE StringFrameA*( tags{9} : Utility.TagListPtr );
  881.     BEGIN
  882.       TagItem( Mui.aFrame , Mui.vFrameString );
  883.       TagsA( tags );
  884.     END StringFrameA;
  885.  
  886.   PROCEDURE StringFrame*{"MuiBasics.StringFrameA"} ( tags{9}.. : Utility.Tag );
  887.  
  888.   PROCEDURE ReadListFrameA*( tags{9} : Utility.TagListPtr );
  889.     BEGIN
  890.       TagItem(  Mui.aFrame , Mui.vFrameReadList );
  891.       TagsA( tags );
  892.     END ReadListFrameA;
  893.  
  894.   PROCEDURE ReadListFrame*{"MuiBasics.ReadListFrameA"} ( tags{9}.. : Utility.Tag );
  895.  
  896.   PROCEDURE InputListFrameA*( tags{9} : Utility.TagListPtr );
  897.     BEGIN
  898.       TagItem( Mui.aFrame , Mui.vFrameInputList );
  899.       TagsA( tags );
  900.     END InputListFrameA;
  901.  
  902.   PROCEDURE InputListFrame*{"MuiBasics.InputListFrameA"} ( tags{9}.. : Utility.Tag );
  903.  
  904.   PROCEDURE PropFrameA*( tags{9} : Utility.TagListPtr );
  905.     BEGIN
  906.       TagItem( Mui.aFrame , Mui.vFrameProp );
  907.       TagsA( tags );
  908.     END PropFrameA;
  909.  
  910.   PROCEDURE PropFrame*{"MuiBasics.PropFrameA"} ( tags{9}.. : Utility.Tag );
  911.  
  912.   PROCEDURE GaugeFrameA*( tags{9} : Utility.TagListPtr );
  913.     BEGIN
  914.       TagItem( Mui.aFrame , Mui.vFrameGauge );
  915.       TagsA( tags );
  916.     END GaugeFrameA;
  917.  
  918.   PROCEDURE GaugeFrame*{"MuiBasics.GaugeFrameA"} ( tags{9}.. : Utility.Tag );
  919.  
  920.   PROCEDURE GroupFrameA*( tags{9} : Utility.TagListPtr );
  921.     BEGIN
  922.       TagItem( Mui.aFrame , Mui.vFrameGroup );
  923.       TagsA( tags );
  924.     END GroupFrameA;
  925.  
  926.   PROCEDURE GroupFrame*{"MuiBasics.GroupFrameA"} ( tags{9}.. : Utility.Tag );
  927.  
  928.   PROCEDURE GroupFrameTA*( s{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr );
  929.     BEGIN
  930.       TagItem2( Mui.aFrame, Mui.vFrameGroup, Mui.aFrameTitle, s );
  931.       TagsA( tags );
  932.     END GroupFrameTA;
  933.  
  934.   PROCEDURE GroupFrameT*{"MuiBasics.GroupFrameTA"}( s{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  935.  
  936. (***************************************************************************
  937. **
  938. ** Spacing Procedures
  939. ** ------------------
  940. **
  941. ***************************************************************************)
  942.  
  943.   PROCEDURE HVSpace*();
  944.     BEGIN
  945.       Tag( Mui.NewObject( Mui.cRectangle, Utility.done ) );
  946.     END HVSpace;
  947.  
  948.  
  949.   PROCEDURE HSpace*( x : LONGINT );
  950.     VAR t : Utility.Tags3;
  951.     BEGIN
  952.       IF x # 0 THEN
  953.         t[0].tag := Mui.aFixWidth;
  954.         t[0].data := x;
  955.       ELSE
  956.         t[0].tag := Utility.ignore;
  957.       END;
  958.       t[1] := Utility.TagItem( Mui.aVertWeight, 0 );
  959.       t[2] := Utility.TagItem( Utility.done, 0 );
  960.       Tag( Mui.NewObjectA( Mui.cRectangle, t ) );
  961.     END HSpace;
  962.  
  963.   PROCEDURE VSpace*( x : LONGINT );
  964.     VAR t : Utility.Tags3;
  965.     BEGIN
  966.       IF x # 0 THEN
  967.         t[0].tag := Mui.aFixHeight;
  968.         t[0].data := x;
  969.       ELSE
  970.         t[0].tag := Utility.ignore;
  971.       END;
  972.       t[1] := Utility.TagItem( Mui.aHorizWeight, 0 );
  973.       t[2] := Utility.TagItem( Utility.done, 0 );
  974.       Tag( Mui.NewObjectA( Mui.cRectangle, t ) );
  975.     END VSpace;
  976.  
  977.   PROCEDURE GroupSpacing*( x: LONGINT );
  978.     BEGIN
  979.       TagItem( Mui.aGroupSpacing, x );
  980.     END GroupSpacing;
  981.  
  982.   PROCEDURE HCenterBegin*();
  983.     BEGIN
  984.       HGroup; GroupSpacing( 0 );
  985.         Child; HSpace( 0 );
  986.     END HCenterBegin;
  987.  
  988.   PROCEDURE HCenterEnd*();
  989.     BEGIN
  990.         Child; HSpace( 0 );
  991.       end;
  992.     END HCenterEnd;
  993.  
  994.   PROCEDURE VCenterBegin*();
  995.     BEGIN
  996.       VGroup; GroupSpacing( 0 );
  997.         Child ; VSpace( 0 );
  998.     END VCenterBegin;
  999.  
  1000.   PROCEDURE VCenterEnd*();
  1001.     BEGIN
  1002.         Child ; VSpace( 0 );
  1003.       end;
  1004.     END VCenterEnd;
  1005.  
  1006.   PROCEDURE InnerSpacing*( h, v : LONGINT );
  1007.     BEGIN
  1008.       Tags( Mui.aInnerLeft   , h,
  1009.             Mui.aInnerRight  , h,
  1010.             Mui.aInnerTop    , v,
  1011.             Mui.aInnerBottom , v,
  1012.             Utility.end );
  1013.     END InnerSpacing;
  1014.  
  1015.  
  1016. (***************************************************************************
  1017. **
  1018. ** String-Object
  1019. ** -------------
  1020. **
  1021. ** The following procedure creates a simple string gadget.
  1022. **
  1023. ***************************************************************************)
  1024.  
  1025.   PROCEDURE StringA*( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1026.     BEGIN
  1027.       StringObject;
  1028.         StringFrame;
  1029.         TagItem2( Mui.aStringMaxLen, maxlen,
  1030.                   Mui.aStringContents, contents );
  1031.       RETURN End();
  1032.     END StringA;
  1033.  
  1034.   PROCEDURE String * {"MuiBasics.StringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; tags{9}.. : Utility.Tag ):Mui.Object;
  1035.   PROCEDURE string * {"MuiBasics.StringA"} ( contents{8} : Exec.STRPTR; maxlen{3} : LONGINT; tags{9}.. : Utility.Tag );
  1036.  
  1037. (***************************************************************************
  1038. **
  1039. ** CheckMark-Object
  1040. ** ----------------
  1041. **
  1042. ** The following procedure creates a checkmark gadget.
  1043. **
  1044. ***************************************************************************)
  1045.  
  1046.   PROCEDURE CheckMarkA*( checked{4} : BOOLEAN ):Mui.Object;
  1047.    BEGIN
  1048.       ImageObject;
  1049.         ImageButtonFrame;
  1050.           Tags( Mui.aInputMode , Mui.vInputModeToggle,
  1051.                 Mui.aImageSpec    , Mui.iCheckMark,
  1052.                 Mui.aImageFreeVert, Exec.true,
  1053.                 Mui.aSelected     , SYSTEM.VAL( SHORTINT, checked ),
  1054.                 Mui.aBackground   , Mui.iButtonBack,
  1055.                 Mui.aShowSelState , Exec.false,
  1056.                 Utility.end );
  1057.       RETURN End();
  1058.     END CheckMarkA;
  1059.  
  1060.   PROCEDURE CheckMark * {"MuiBasics.CheckMarkA"}( checked{4} : BOOLEAN ):Mui.Object;
  1061.   PROCEDURE checkMark * {"MuiBasics.CheckMarkA"}( checked{4} : BOOLEAN );
  1062.  
  1063.   PROCEDURE KeyCheckMarkA*( checked{4} : Exec.LONGBOOL; key{3} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1064.    BEGIN
  1065.       ImageObject;
  1066.         ImageButtonFrame;
  1067.           Tags( Mui.aInputMode    , Mui.vInputModeToggle,
  1068.                 Mui.aImageSpec    , Mui.iCheckMark,
  1069.                 Mui.aImageFreeVert, Exec.true,
  1070.                 Mui.aSelected     , checked,
  1071.                 Mui.aBackground   , Mui.iButtonBack,
  1072.                 Mui.aShowSelState , Exec.false,
  1073.                 Mui.aControlChar  , key,
  1074.                 Utility.end );
  1075.         TagsA( tags );
  1076.       RETURN End();
  1077.     END KeyCheckMarkA;
  1078.  
  1079.   PROCEDURE KeyCheckMark *{"MuiBasics.KeyCheckMarkA"}( checked{4} : Exec.LONGBOOL; key{3} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1080.   PROCEDURE keyCheckMark *{"MuiBasics.KeyCheckMarkA"}( checked{4} : Exec.LONGBOOL; key{3} : CHAR; tags{9}.. : Utility.Tag );
  1081.  
  1082. (***************************************************************************
  1083. **
  1084. ** Button-Objects
  1085. ** --------------
  1086. **
  1087. ** Note: Use small letters for KeyButtons, e.g.
  1088. **       KeyButton("Cancel",'c')  and not  KeyButton("Cancel",'C') !!
  1089. **
  1090. ***************************************************************************)
  1091.  
  1092.   PROCEDURE SimpleButtonA * ( name{8} : Exec.STRPTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1093.   (* $SaveRegs+ *)
  1094.     BEGIN
  1095.       TextObject;
  1096.         ButtonFrame;
  1097.           Tags( Mui.aTextContents, name,
  1098.                 Mui.aTextPreParse, SYSTEM.ADR("\033c"),
  1099.                 Mui.aTextSetMax  , Exec.false,
  1100.                 Mui.aInputMode   , Mui.vInputModeRelVerify,
  1101.                 Mui.aBackground  , Mui.iButtonBack,
  1102.                 Utility.end );
  1103.         TagsA( tags );
  1104.       RETURN End();
  1105.     END SimpleButtonA;
  1106.  
  1107.   PROCEDURE SimpleButton * {"MuiBasics.SimpleButtonA"} ( name{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1108.   PROCEDURE simpleButton * {"MuiBasics.SimpleButtonA"} ( name{8} : ARRAY OF CHAR; tags{9}.. : Utility.Tag );
  1109.  
  1110.   PROCEDURE KeyButtonA * ( name{8} : Exec.STRPTR; key{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1111.   (* $SaveRegs+ *)
  1112.     BEGIN
  1113.       TextObject;
  1114.         ButtonFrame;
  1115.          Tags( Mui.aTextContents, name,
  1116.                Mui.aTextPreParse, SYSTEM.ADR("\033c"),
  1117.                Mui.aTextSetMax  , Exec.false,
  1118.                Mui.aTextHiChar  , key,
  1119.                Mui.aControlChar , key,
  1120.                Mui.aInputMode   , Mui.vInputModeRelVerify,
  1121.                Mui.aBackground  , Mui.iButtonBack,
  1122.                Utility.end );
  1123.         TagsA( tags );
  1124.       RETURN End();
  1125.     END KeyButtonA;
  1126.  
  1127.   PROCEDURE KeyButton * {"MuiBasics.KeyButtonA"} ( name{8} : ARRAY OF CHAR; key{4} : CHAR; tags{9}.. : Utility.TagListPtr ):Mui.Object;
  1128.   PROCEDURE keyButton * {"MuiBasics.KeyButtonA"} ( name{8} : ARRAY OF CHAR; key{4} : CHAR; tags{9}.. : Utility.TagListPtr );
  1129.  
  1130. (***************************************************************************
  1131. **
  1132. ** Cycle-Object
  1133. ** ------------
  1134. **
  1135. ***************************************************************************)
  1136.  
  1137.   PROCEDURE CycleA * ( entries{10} : Exec.APTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1138.   (* $SaveRegs+ *)
  1139.     BEGIN
  1140.       CycleObject( Mui.aCycleEntries, entries, Utility.end );
  1141.         TagsA( tags );
  1142.       RETURN End();
  1143.     END CycleA;
  1144.  
  1145.   PROCEDURE Cycle * {"MuiBasics.CycleA"} ( entries{10} : Exec.APTR; tags{9}.. : Utility.Tag ):Mui.Object;
  1146.   PROCEDURE cycle * {"MuiBasics.CycleA"} ( entries{10} : Exec.APTR; tags{9}.. : Utility.Tag );
  1147.  
  1148.   PROCEDURE KeyCycleA * ( entries{10} : Exec.APTR; key{4} : LONGINT; tags{9} : Utility.TagListPtr ):Mui.Object;
  1149.   (* $SaveRegs+ *)
  1150.     BEGIN
  1151.       CycleObject( Mui.aCycleEntries, entries,
  1152.                    Mui.aControlChar, key,
  1153.                    Utility.end );
  1154.         TagsA( tags );
  1155.       RETURN End();
  1156.     END KeyCycleA;
  1157.  
  1158.   PROCEDURE KeyCycle * {"MuiBasics.KeyCycleA"} ( entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag ):Mui.Object;
  1159.   PROCEDURE keyCycle * {"MuiBasics.KeyCycleA"} ( entries{10} : Exec.APTR; key{4} : CHAR; tags{9}.. : Utility.Tag );
  1160.  
  1161. (***************************************************************************
  1162. **
  1163. ** Radio-Object
  1164. ** ------------
  1165. **
  1166. ***************************************************************************)
  1167.  
  1168.   PROCEDURE RadioA * ( name{8}: Exec.STRPTR; entries{10} : Exec.APTR; tags{9} : Utility.TagListPtr ):Mui.Object;
  1169.   (* $SaveRegs+ *)
  1170.     BEGIN
  1171.       RadioObject;
  1172.         GroupFrameT( name^ );
  1173.           TagItem( Mui.aRadioEntries, entries );
  1174.         TagsA( tags );
  1175.       RETURN End();
  1176.     END RadioA;
  1177.  
  1178.   PROCEDURE Radio * {"MuiBasics.RadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; tags{9}.. : Utility.Tag ):Mui.Object;
  1179.   PROCEDURE radio * {"MuiBasics.RadioA"} ( name{8} : ARRAY OF CHAR; entries{10} : Exec.APTR; tags{9}.. : Utility.Tag );
  1180.  
  1181. (***************************************************************************
  1182. **
  1183. ** Popup-Object
  1184. ** ------------
  1185. **
  1186. ** An often needed GUI element is a string gadget with a little button
  1187. ** that opens up a (small) window with a list containing possible entries
  1188. ** for this gadget. Together with the Popup and the String macro,
  1189. ** such a thing would look like
  1190. **
  1191. ** VGroup;
  1192. **    Child; PopupBegin;
  1193. **             STFont := String( "helvetica/13", 32 );
  1194. **           PopupEnd( hook, Mui.iPopUp, STFont );
  1195. **    ...;
  1196. **
  1197. ** STFont will hold a pointer to the embedded string gadget and can
  1198. ** be used to set and get its contents as with every other string object.
  1199. **
  1200. ** For Hook description see below.
  1201. ** The hook will be called with the string gadget as object whenever
  1202. ** the user releases the popup button and could look like this:
  1203. **
  1204. ** PROCEDURE FontReq( hook : Hook; obj : Mui.Object : args : Args) : LONGINT;
  1205. **   VAR window : Intuition.WindowPtr;
  1206. **       l, t, w, h : LONGINT;
  1207. **       req : ASL.AslRequesterPtr;
  1208. ** BEGIN
  1209. **    ...
  1210. **
  1211. **    (* put our application to sleep while displaying the requester *)
  1212. **      Set( Application, Mui.aApplicationSleep, Exec.true );
  1213. **
  1214. **    (* get the calling objects window and position *)
  1215. **      Get( obj, Mui.aWindow  , window );
  1216. **      Get( obj, Mui.aLeftEdge, l );
  1217. **      Get( obj, Mui.aTopEdge , t );
  1218. **      Get( obj, Mui.aWidth   , w );
  1219. **      Get( obj, Mui.aHeight  , h );
  1220. **
  1221. **    req := Mui.AllocAslRequestTags( ASL.fontRequest, Utility.done )
  1222. **    IF req # NIL THEN
  1223. **
  1224. **       IF (Mui.AslRequestTags(req,
  1225. **               ASL.foWindow         ,window,
  1226. **               ASL.foPrivateIDCMP   ,TRUE,
  1227. **               ASL.foTitleText      ,"Select Font",
  1228. **               ASL.foInitialLeftEdge,window->LeftEdge + l,
  1229. **               ASL.foInitialTopEdge ,window->TopEdge  + t+h,
  1230. **               ASL.foInitialWidth   ,w,
  1231. **               ASL.foInitialHeight  ,250,
  1232. **               Utility.done ) ) THEN
  1233. **
  1234. **          (* set the new contents for our string gadget *)
  1235. **                              Set( args(PopupArgs).linkedObj, Mui.aStringContents, req(ASL.FontRequester).attr.name);
  1236. **       END;
  1237. **       Mui.FreeAslRequest( req );
  1238. **   END;
  1239. **
  1240. **    (* wake up our application again *)
  1241. **      Set(Application, Mui.aApplicationSleep, Exec.false );
  1242. **
  1243. **      RETURN( 0);
  1244. ** END FontReq:
  1245. **
  1246. ** Note: This Procedure is translated to Oberon on the fly, no warranty is given
  1247. **       that this piece of code works.
  1248. **
  1249. ***************************************************************************)
  1250.  
  1251.   PROCEDURE PopupBegin * ();
  1252.     VAR dummy : Mui.Object;
  1253.     BEGIN
  1254.       HGroup; GroupSpacing( 1 );
  1255.     END PopupBegin;
  1256.  
  1257.   PROCEDURE PopupEnd * ( hook : Hook; img : LONGINT; obj : Mui.Object ):Mui.Object;
  1258.     VAR dummy : Mui.Object;
  1259.     BEGIN
  1260.         Child; ImageObject;
  1261.                  ImageButtonFrame;
  1262.                  Tags( Mui.aImageSpec, img,
  1263.                        Mui.aImageFontMatchWidth, Exec.true,
  1264.                        Mui.aImageFreeVert, Exec.true,
  1265.                        Mui.aInputMode, Mui.vInputModeRelVerify,
  1266.                        Utility.end );
  1267.                dummy := End();
  1268.                IF (obj # NIL) & (dummy # NIL) & (hook # NIL) THEN
  1269.                  SetHookObject( hook, dummy );
  1270.                  Mui.DoMethod( dummy, Mui.mNotify, Mui.aPressed, Exec.false,
  1271.                                dummy, 3, Mui.mCallHook, hook, obj );
  1272.                END;
  1273.       end;
  1274.       RETURN dummy;
  1275.     END PopupEnd;
  1276.  
  1277.   PROCEDURE popupEnd * {"MuiBasics.PopupEnd"} ( hook : Hook; img : LONGINT; obj : Mui.Object );
  1278.  
  1279. (***************************************************************************
  1280. **
  1281. ** Labeling Objects
  1282. ** ----------------
  1283. **
  1284. ** Labeling objects, e.g. a group of string gadgets,
  1285. **
  1286. **   Small: |foo   |
  1287. **  Normal: |bar   |
  1288. **     Big: |foobar|
  1289. **    Huge: |barfoo|
  1290. **
  1291. ** is done using a 2 column group:
  1292. **
  1293. ** ColGroup(2);
  1294. **      Child; Label2( "Small:"  );
  1295. **    Child; StringObject; end;
  1296. **      Child; Label2( "Normal:" );
  1297. **    Child; StringObject; end;
  1298. **      Child; Label2( "Big:"    );
  1299. **    Child; StringObject; end;
  1300. **      Child; Label2( "Huge:"   );
  1301. **    Child; StringObject; end;
  1302. **    end;
  1303. **
  1304. ** Note that we have three versions of the label procedure, depending on
  1305. ** the frame type of the right hand object:
  1306. **
  1307. ** Label1(): For use with standard frames (e.g. checkmarks).
  1308. ** Label2(): For use with double high frames (e.g. string gadgets).
  1309. ** Label() : For use with objects without a frame.
  1310. **
  1311. ** These procedures ensure that your label will look fine even if the
  1312. ** user of your application configured some strange spacing values.
  1313. ** If you want to use your own labeling, you'll have to pay attention
  1314. ** on this topic yourself.
  1315. **
  1316. ***************************************************************************)
  1317.  
  1318.   PROCEDURE Label * ( label : ARRAY OF CHAR ):Mui.Object;
  1319.   (* $CopyArrays- *)
  1320.     BEGIN
  1321.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1322.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1323.                   Mui.aWeight      , 0,
  1324.                   Mui.aInnerLeft   , 0,
  1325.                   Mui.aInnerRight  , 0,
  1326.                   Utility.end );
  1327.       RETURN End();
  1328.     END Label;
  1329.  
  1330.   PROCEDURE Label1 * ( label : ARRAY OF CHAR ):Mui.Object;
  1331.   (* $CopyArrays- *)
  1332.     BEGIN
  1333.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1334.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1335.                   Mui.aWeight      , 0,
  1336.                   Mui.aInnerLeft   , 0,
  1337.                   Mui.aInnerRight  , 0,
  1338.                   Utility.end );
  1339.         ButtonFrame;
  1340.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1341.       RETURN End();
  1342.     END Label1;
  1343.  
  1344.   PROCEDURE Label2 * ( label : ARRAY OF CHAR ):Mui.Object;
  1345.   (* $CopyArrays- *)
  1346.     BEGIN
  1347.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1348.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1349.                   Mui.aWeight      , 0,
  1350.                   Mui.aInnerLeft   , 0,
  1351.                   Mui.aInnerRight  , 0,
  1352.                   Utility.end );
  1353.         StringFrame;
  1354.          TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1355.       RETURN End();
  1356.     END Label2;
  1357.  
  1358.   PROCEDURE KeyLabel * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1359.   (* $CopyArrays- *)
  1360.     BEGIN
  1361.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1362.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1363.                   Mui.aTextHiChar  , ORD( hichar ),
  1364.                   Mui.aWeight      , 0,
  1365.                   Mui.aInnerLeft   , 0,
  1366.                   Mui.aInnerRight  , 0,
  1367.                   Utility.end );
  1368.       RETURN End();
  1369.     END KeyLabel;
  1370.  
  1371.   PROCEDURE KeyLabel1 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1372.   (* $CopyArrays- *)
  1373.     BEGIN
  1374.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1375.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1376.                   Mui.aTextHiChar  , ORD( hichar ),
  1377.                   Mui.aWeight      , 0,
  1378.                   Mui.aInnerLeft   , 0,
  1379.                   Mui.aInnerRight  , 0,
  1380.                   Utility.end );
  1381.         ButtonFrame;
  1382.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1383.       RETURN End();
  1384.     END KeyLabel1;
  1385.  
  1386.   PROCEDURE KeyLabel2 * ( label : ARRAY OF CHAR; hichar : CHAR ):Mui.Object;
  1387.   (* $CopyArrays- *)
  1388.     BEGIN
  1389.       TextObject( Mui.aTextPreParse, SYSTEM.ADR( "\033r" ),
  1390.                   Mui.aTextContents, SYSTEM.ADR( label ),
  1391.                   Mui.aTextHiChar  , ORD( hichar ),
  1392.                   Mui.aWeight      , 0,
  1393.                   Mui.aInnerLeft   , 0,
  1394.                   Mui.aInnerRight  , 0,
  1395.                   Utility.end );
  1396.         StringFrame;
  1397.           TagItem( Mui.aFramePhantomHoriz, Exec.true );
  1398.       RETURN End();
  1399.     END KeyLabel2;
  1400.  
  1401.  
  1402.   PROCEDURE label * {"MuiBasics.Label"} ( lab : ARRAY OF CHAR );
  1403.  
  1404.   PROCEDURE label1 * {"MuiBasics.Label1"} ( lab : ARRAY OF CHAR );
  1405.  
  1406.   PROCEDURE label2 * {"MuiBasics.Label2"} ( lab : ARRAY OF CHAR );
  1407.  
  1408.   PROCEDURE keyLabel * {"MuiBasics.KeyLabel"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1409.  
  1410.   PROCEDURE keyLabel1 * {"MuiBasics.KeyLabel1"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1411.  
  1412.   PROCEDURE keyLabel2 * {"MuiBasics.KeyLabel2"} ( lab : ARRAY OF CHAR; hichar : CHAR );
  1413.  
  1414. (***************************************************************************
  1415. **
  1416. ** Controlling Objects
  1417. ** -------------------
  1418. **
  1419. ** Set() and Get() are two short stubs for BOOPSI GetAttr() and SetAttrs()
  1420. ** calls:
  1421. **
  1422. **
  1423. **    VAR x : Exec.STRPTR;
  1424. **
  1425. **    Set(obj,MUIA_String_Contents, SYSTEM.ADR("foobar") );
  1426. **    Get(obj,MUIA_String_Contents, x);
  1427. **
  1428. **    Dos.PrintF( "gadget contains '%s'\n" , x );
  1429. **
  1430. **
  1431. ***************************************************************************)
  1432.  
  1433.   PROCEDURE Set*( obj : Mui.Object; attr, value : Exec.APTR );
  1434.     BEGIN
  1435.       IF Intuition.SetAttrs( obj, attr, value, Utility.end ) = 0 THEN END
  1436.     END Set;
  1437.  
  1438.   PROCEDURE Get*( obj : Mui.Object; attr : LONGINT ; VAR store : ARRAY OF Exec.BYTE );
  1439.     BEGIN
  1440.       IF Intuition.GetAttr( attr, obj, store) = 0 THEN END
  1441.     END Get;
  1442.  
  1443.   PROCEDURE SetMutex * ( obj : Mui.Object; n : LONGINT );
  1444.     BEGIN
  1445.       Set( obj, Mui.aRadioActive, n );
  1446.     END SetMutex;
  1447.  
  1448.   PROCEDURE SetCycle * ( obj : Mui.Object; n : LONGINT );
  1449.     BEGIN
  1450.       Set( obj, Mui.aCycleActive, n );
  1451.     END SetCycle;
  1452.  
  1453.   PROCEDURE SetString * ( obj : Mui.Object; s : Exec.STRPTR );
  1454.     BEGIN
  1455.       Set( obj, Mui.aStringContents, s );
  1456.     END SetString;
  1457.  
  1458.   PROCEDURE SetCheckmark * ( obj : Mui.Object; b : BOOLEAN );
  1459.     BEGIN
  1460.       Set( obj, Mui.aSelected, SYSTEM.VAL(SHORTINT,b) );
  1461.     END SetCheckmark;
  1462.  
  1463.   PROCEDURE SetSlider * ( obj : Mui.Object; l : LONGINT );
  1464.     BEGIN
  1465.       Set( obj, Mui.aSliderLevel, l );
  1466.     END SetSlider;
  1467.  
  1468. BEGIN
  1469.   Init();
  1470. END MuiBasics.
  1471.  
  1472.